/** ***********************************************************************************
* @file         vehicle_data_process.c
* @brief        车机数据解析处理
* @details      主要用来处理和MCU 数据解析，处理从车机传输的数据
* @author       
* @date         2021/01/30
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/
#ifndef VEH_DATA_PRO_H
#define VEH_DATA_PRO_H

#include "gaoz_api.h"

#define TERM_ID         "\x30\x00\x00\x02\x44\x50"
#define UNIT_FLASH_DATA_LEN     		256
#define N808MCU_RX_BUF_SIZE     		(1 * 1024)
#define  MCU_ACK_QUEUE_MAX_NUM			( 10 )
#define  MCU_ACK_QUEUE_RX_DATA_TIME		( 2000 )
#define  CTRL_LOCK_TIME_PERIOD      	( 5 )
#define  MCU_OTA_OVERNUM     			( 3 )  
#define  MCU_WAKEUP_TM		       		( 300 )	 

#define  VEH_MCU_INFOR_SIZE 			( 64 )

#pragma pack(1)

typedef struct 
{
	uint8_t	status_len;//状态字节长度
	uint8_t	opener_status;//开通器状态
	uint8_t	key_num;//钥匙数量
	uint8_t	SST_st;	// 自动启停状态
	uint8_t	EPC_lamp_st; // 电子动力控制系统 故障灯
	uint8_t	ECS_lamp_st; // EPC 故障灯
	uint8_t	LIG_lamp_st; // 灯光 故障灯
	uint8_t	TPMS_lamp_st; // 胎压 故障灯
	uint8_t	BRAKE_lamp_st; // 刹车故障灯
	uint8_t	OIL_lamp_st; // 机油 故障灯
	uint8_t	ENG_lamp_st; // 发动机 故障灯
	uint8_t	CLT_lamp_st; // 冷却液 故障灯
	uint8_t	BAT_lamp_st; // 电池 故障灯
	uint8_t	ESP_lamp_st; // 助力转向 故障灯
	uint8_t	SRS_lamp_st; // 安全气囊 故障灯  
	uint8_t	ABS_lamp_st; // ABS故障灯  
	uint8_t ACC_lamp_st; // ACC车距传感器故障灯状态
	uint8_t	Safetybelt_lamp_st; // 安全带 提醒灯
	uint8_t	handle_brake_lamp_st; // 手刹提醒灯  
	uint8_t Reserved[64];
	/* data */
}sz_ext_status_struct_typedef;//神州扩展状态用

typedef struct 
{
	uint8_t		refuel_st; 
	uint8_t		acc_pedal_value;//油门踏板开度
	uint8_t		brake_pedal_value;// 刹车踏板开度
	uint8_t		air_bag_st;//安全气囊状态
	uint8_t		safetybelt_st;//安全带状态
	uint16_t 	refuel_L;
	uint16_t	once_avg_oil;// 自本次启动的平均油耗
	uint16_t	total_avg_oil;//总的 平均油耗
	uint16_t	steering_wheel_deg;//方向盘转角
	/* data */
}vehicle_new_info_0504_25_struct_typedef;


typedef struct 
{
	uint8_t  vin[17];
	uint8_t  doors_status;
	uint8_t  lights_status;
	uint8_t  win_status;
	uint8_t  lock;
	uint8_t  brake_gear;
	uint8_t  Ignition_status;
	uint8_t  Charge_status;
	uint8_t  other_status; //
	uint32_t Odo;
	uint16_t Oil;
	uint16_t Electricity;
	uint16_t Endurance_mileage;
	uint16_t speed; //1/10km/h
	uint16_t powerBatVolt;//动力电池电流
	uint16_t powerBatCurrent;//动力电池电流   最高位1  负数     最高位0 正数
	uint8_t	lf_TP;//左前轮胎压值
	uint8_t	rf_TP;//右前轮胎压值
	uint8_t	lr_TP;//左后轮胎压值
	uint8_t	rr_TP;//右后轮胎压值
	uint8_t	lf_T;//左前轮胎温度
	uint8_t	rf_T;//右前轮胎温度
	uint8_t	lr_T;//左后轮胎温度
	uint8_t	rr_T;//右后轮胎温度
	uint8_t	TPMSRst;//胎压标志是否有效
	//--------------------------------------	
	uint8_t	CNGRst;//压力传感器是否有效
	uint8_t	CNGVolt;//增加CNG压力传感器的电压
	
	uint8_t  GasAddRst;//充天然气是否完成
	uint8_t	AddGas; //增加气体量
	
	//--------------------------------------
	uint8_t DTC_Num;  //故障码总数
	uint32_t DTCLIST[10];  //故障列表 最多存10个
	uint32_t EMSDTCLT[10];  //发动机故障列表 最多存10个
	uint32_t TCUDTCLT[10];  //发动机故障列表 最多存10个
	
	uint16_t Wheel_Deg;     //方向盘角度
	uint16_t Wheel_Speed;     //方向盘转速
	uint16_t AvgOilCsp;       //平均油耗
	uint8_t  SysFailtStatus;//系统故障列表
    uint16_t bat_vol;
    uint8_t relay_sta;
	uint8_t vehicle_type;	//车辆类型
	uint8_t vehicle_tire[10]; //汽车胎压 胎温值
	uint16_t oxygen_sensors;	//氧气传感器数据 
	uint8_t auto_start_st;
}n808_vehicle_data_t;
#pragma pack()

typedef struct
{
	uint8_t  vin[17];
	uint8_t  brake_gear;
	uint32_t Odo;
	uint16_t Oil;
	uint16_t Electricity;
	uint16_t Endurance_mileage;
}vehicle_save_data_t;
 

typedef  struct
{
	uint16_t len;
	uint8_t *data;
}n808_mcu_recv_buf_typedef;
/**************************平台等待应答的状态**************************/
typedef enum
{
    MCU_NO_RESPONSE = 0x00,          /* 无应答 */
    MCU_HAVE_RESPONSE,                /* 有应答 */
}mcu_response_e;

typedef enum
{
    MCU_SEND_ERR = 0x00,             /* 发送数据失败 */
    MCU_SEND_OK,                      /* 发送数据成功 */
}mcu_send_data_e;

typedef enum
{
	CARCTL_RUNING_INIT =0x00,			/* 初始化状态  */
	CARCTL_RUNING_CKVER ,				/* 查询版本  */
	CARCTL_RUNING_LOCK_UNLOCK,		    /* 开关锁  */				
	CARCTL_RUNING_SPEAK_LIGHT,			/* 鸣笛闪灯 */
	CARCTL_RUNING_WAIT,					/* 开关锁延时  */	
	CARCTL_RUNING_OTA,                  /* OTA */	
	CARCTL_RUNING_UPGRADE,              /* upgrade */	
	CARCTL_RUNING_RELAY,                /* RELAY */
	CARCTL_RUNING_CKCARST,              /* 车身状态 */
	CARCTL_RUNING_STARTPOWER,           /* 一键启动 */
	CARCTL_RUNING_SETODO,               /* 设置里程 */
	CARCTL_RUNING_CKYH,                 /* 查询亿花数据 */
	CARCTL_RUNING_WIND,					/* 天窗/升降玻璃 */
	CARCTL_RUNING_FUALT_CODE_QUERY,		/* 故障码查询*/
	CARCTL_RUNING_FUALT_CODE_CLEAR,		/* 故障码清除*/
	CARCTL_RUNING_MAINTENANCE_INFOR_SET,/* 保养信息设置*/
	CARCTL_RUNING_KEY_INFOR_SET,		/* 安全密钥设置*/
	CARCTL_RUNING_RV_POWER_CTL,			/* 房车断电控制*/
}vehicle_ctrl_run_state_e;

typedef enum
{
	MCU_RESPONSE_INIT = 0x00,		
	MCU_RESPONSE_LOCK_UNLOCK,
	MCU_RESPONSE_SPEAK_LIGHT,
	MCU_RESPONSE_OTA,
	MCU_RESPONSE_CKVER,
	MCU_RESPONSE_RELAY,
	MCU_RESPONSE_CKCARST,
	MCU_RESPONSE_SWSIM,
	MCU_RESPONSE_STARTPOWER,
	MCU_RESPONSE_SETODO,
	MCU_RESPONSE_CKYH,
	MCU_RESPONSE_WIND,
	MCU_RESPONSE_FUALT_CODE,
	MCU_RESPONSE_MAINTENANCE_INFOR,
	MCU_RESPONSE_RV_POWER_CTL,
}mcu_res_state_e;	

typedef enum
{
    MCU_RES_OK = 0x00,                 /* 成功 */
    MCU_RES_ERR,                        /* 失败 */
}mcu_result_e;

typedef enum
{
    CAN_WORK_ST_INIT = 0x00,
    CAN_WORK_ST_STOP,
    CAN_WORK_ST_START,
} can_work_state_e; /*ACC或engine的状态*/

/*************************MCU应答结果信息结构体**********************/
typedef struct
{
    mcu_res_state_e        commane; /* 应答命令 */
 	mcu_result_e           results; /* 应答结果 */
} mcu_res_msg_t;
/* 结果信息结构体 */
typedef struct
{
	 uint8_t send_type;  
	 uint8_t send_cnt;  
	 uint8_t recv_cnt; 
	 uint8_t switch_sim;/* 切卡标识 */
	 uint16_t respondcmd; /* 应答命令 */
     uint16_t respondsn; /* 应答流水號 */
     uint8_t respondsta; /* 应答结果 */
	 uint16_t lockerr;  /* 错误码  */
	 uint32_t total; /* 包長度 */
} mcu_send_data_st_t;

typedef enum
{
	MCU_OTA_INIT = 0x00,		
	MCU_OTA_REQUEST,
	MCU_OTA_OVER,
}mcu_ota_state_e;	

typedef struct
{
	uint8_t mcu_ota_overnum;  /*超时次数*/
	mcu_ota_state_e   mcu_ota_st;
} mcu_ota_st_t;

/* gsen结构体 */
typedef struct
{
	union 
    {
		uint8_t gsen_alarm;
		struct
        {
             uint8_t car_crash        : 1;
             uint8_t car_rollover     : 1;
             uint8_t car_shake        : 1;
             uint8_t car_shifting     : 1;
             uint8_t rsv       		  : 4;
        };
	};
} n808_gsen_st_t;

typedef enum
{
	RKE_SHORT_KEY_IDLE = 0x00,		
	RKE_SHORT_KEY_LOCK,
	RKE_SHORT_KEY_UNLOCK,
	RKE_SHORT_KEY_BOOT,
	RKE_SHORT_KEY_PANIC,

	RKE_SHORT_KEY_AND = 0x06,

	RKE_LONG_KEY_LOCK = 0x09,
	RKE_LONG_KEY_UNLOCK,
	RKE_LONG_KEY_BOOT,
	RKE_LONG_KEY_LOCK_BOOT_AND,
	RKE_LONG_KEY_UNLOCK_BOOT_AND,

	RKE_LONG_KEY_AND = 0x0F,
}mcu_pkekey_e;	
typedef struct
{
     uint32_t key_id; /* id */
	 uint32_t key_sn;  /* sn  */
	 uint32_t key_code; /* code */
} mcu_send_pkekey_t;

/******************WARMCAR 0x16定制BMS系统参数附加包信息结构体*********************/
#pragma pack(1)
typedef struct 
{
	uint8_t hvbs_number;		/*最高电压电池子系统号*/
	uint8_t hvbc_number;		/*最高电压电池单体代号*/
	uint16_t hv_value;			/*最高电压值，精度 0.001V*/
	
	uint8_t lvbs_number;		/*最低电压电池子系统号*/
	uint8_t lvbc_number;		/*最低电压电池单体代号*/
	uint16_t lv_value;			/*最低电压值，精度 0.001V*/
	
	uint8_t dev_differ;			/*放电末端压差*/
	uint8_t cev_differ;			/*充电末端压差*/
	
	uint16_t total_voltage;		/*总电压，精度0.1V*/
	uint32_t total_current;		/*总电流精度 0.1A  偏移-500，即上报值-500后为实际值*/
	
	uint8_t hts_number;			/*最高温度子系统号*/
	uint8_t htp_number;			/*最高温度探针序号*/
	uint8_t ht_value;			/*最高温度值，精度 1°   偏移-40，即上报值-40后为实际值*/
	
	uint8_t lts_number;			/*最低温度子系统号*/
	uint8_t ltp_number;			/*最低温度探针序号*/
	uint8_t lt_value;			/*最低温度值，精度 1°   偏移-40即上报值-40后为实际值*/
	
	uint8_t fault_code[10];		/*故障码*/
	uint32_t charg_state;		/*BMSInfo：
								Bit0 电流超过150A 触发上报(协议上有放电电流过大报警和充电电流过大报警)
								Bit1 快充插枪状态
								Bit2 慢充插枪状态
								Bit3 快充启动状态
								Bit4 慢充启动状态
								Bit5 快充正常结束
								Bit6 快充异常结束
								Bit7 慢充正常结束
								Bit8 慢充异常结束*/

	uint16_t bat_soh;			/*电池SOH*/
	uint8_t  mtr_ctrl_temp;     /*电机控制器温度*/
	uint8_t  mtr_temp;          /*电机温度*/
	
	uint8_t reserved[2];		/*预留*/
}vehicle_warmcar_package_data_t;

#pragma pack()

/******************WARMCAR LED运行状态数据结构体*********************/
#define VEH_WAEMCAR_LED_RET_LEN	( 8 )
typedef struct 
{
	uint8_t run_st;				/*LED 屏幕运行的状态*/
	uint8_t ret_size;			/*LED 屏幕应答返回的数据长度*/
	uint8_t data[VEH_WAEMCAR_LED_RET_LEN];	/*LED 屏幕应答数据内容*/
}vehicle_warmcar_led_data_t;

/******************WARMCAR LED运行状态数据结构体*********************/
#define VEH_WARMCAR_NET_DATA_LEN	( 160 )
typedef struct 
{
	uint16_t state;				/*数据状态，1-数据有效，0-数据无效*/
	uint16_t len;				/*LED 网络透传数据长度*/
	uint8_t data[VEH_WARMCAR_NET_DATA_LEN];	/*LED 网络数据内容*/
}vehicle_warmcar_net_data_t;

extern uint32_t sfb_handle_id;
extern GaozSemaphoreHandle_t   upgradeid_mutex ;
extern mcu_send_pkekey_t mcu_pkekey; 

/*************************网络鉴权运行状态类型******************************/
typedef enum
{
	VEHICLE_AUTH_INIT = 0x00,	/*鉴权状态初始化*/
	VEHICLE_AUTH_REQ,			/*鉴权请求*/
}vehicle_authentication_type_e;	

/*************************一键启动控制状态类型******************************/
#pragma pack(1)

typedef struct 
{
	uint16_t sn;	/*对应的平台消息的流水号*/
	uint16_t id;	/*对应的平台消息的ID*/
	uint8_t  st;	/*01：代表启动 02：代表熄火*/
}vehicle_engine_start_infor_t;	

#pragma pack()

/*************************一键启动控制状态类型******************************/
#pragma pack(1)

typedef struct 
{
	uint16_t sn;	/*对应的平台消息的流水号*/
	uint16_t id;	/*对应的平台消息的ID*/
	uint8_t  res;	/*0：成功/确认；1：失败；2：消息有误 成功：没有结果类型字段 失败：添加结果类型字段*/
	uint16_t type;	/*对应结果分析*/
}vehicle_engine_start_result_t;	

#pragma pack()

/***************************车辆故障码数据类型******************************/
typedef enum
{
	FAULE_CODE_INIT = 0x00,	/*故障码初始化*/
	FAULE_CODE_READ,		/*故障码读取*/
}vehicle_fault_code_state_e;	

#define VEHICLE_DTC_INFOR_SIZE ( 45 )
#pragma pack(1)
typedef struct 
{
	uint8_t type;	/*故障码表类型*/
	uint8_t model;	/*车辆类型*/
	uint16_t size;	/*故障码长度*/
	uint32_t dtc[VEHICLE_DTC_INFOR_SIZE];	/*故障码信息*/
}vehicle_fault_code_infor_t;
#pragma pack()


#pragma pack(1)

typedef struct 
{
	uint8_t type;	/*故障码表类型*/
	uint8_t model;	/*车辆类型*/
	uint16_t len;
	uint8_t vehicle_dtc_info[2048];
}new_vehicle_fault_code_infor_t;
#pragma pack()

/*************************保养信息设置数据类型结构体******************************/
#pragma pack(1)
typedef struct 
{	
	uint32_t mileage;	/*里程 单位KM*/
	uint16_t time;		/*时间 天*/
	uint32_t smail_mil;	/*小保养里程*/
	uint16_t smail_time;/*小保养时间*/
	uint8_t  oil_per;	/*机油百分比，默认0*/
}vehicle_maintenance_infor_t;
#pragma pack()

/*************************保养信息设置数据类型结构体******************************/
typedef struct 
{
	uint8_t state;		/*保养信息设置状态 0-无效，1-有效*/
	vehicle_maintenance_infor_t infor;
}vehicle_maintenance_cfg_t;

/*************************上报BMS数据信息******************************/
#define VEH_BMS_INFOR_LEN	( 73 )
#pragma pack(1)
typedef struct 
{
	uint8_t type;		/*数据项 默认为0x14*/
	uint16_t len;		/*数据长度，默认为 73个字节*/
	uint8_t data[VEH_BMS_INFOR_LEN];	/*数据内容*/
}vehicle_bms_infor_t;
#pragma pack()

/*************************车辆安全认证SEED/KEY数据获取***************************/
#define VEH_SEED_KEY_INFOR_LEN ( 64 )
#pragma pack(1)
typedef struct 
{
	uint16_t type;		/*车辆类型*/
	uint8_t  len;		/*数据长度*/
	uint8_t  data[VEH_SEED_KEY_INFOR_LEN]; /*数据内容*/
}vehicle_seed_infor_t;
#pragma pack()

#pragma pack(1)
typedef struct 
{
	uint8_t  len;		/*数据长度*/
	uint8_t  data[VEH_SEED_KEY_INFOR_LEN]; /*数据内容*/
}vehicle_key_infor_t;
#pragma pack()

/*************************车辆ADAS实时数据上报***********************************/
#define VEH_ADAS_INFOR_NUM	( 50 )
#define VEH_ADAS_POSION_NUM	( 50 )
#pragma pack(1)
typedef struct 
{
	uint32_t timestamp;		/*时间戳*/
	uint8_t  ms;			/*时间mS，0.01S*/
	uint16_t speed;			/*车辆速度两个字节表示。0x00,0x50表示8.0Km/H*/
	uint8_t  oil_pos;		/*油门踏板角度单字节表示。0x20表示油门踏板32度。0xFF表示无效值。*/
	uint8_t  brake_pos;		/*刹车踏板角度单字节表示。0x20表示油门踏板32度。0xFF表示无效值。*/
	uint16_t wheel_angle;	/*方向盘角度两个字节，单位0.1度*/
	uint32_t lat;			/*以度为单位的纬度值乘以10的6次方，精确到百万分之一度*/
	uint32_t lon;			/*以度为单位的经度值乘以10的6次方，精确到百万分之一度*/
}vehicle_adas_data_t;

typedef struct 
{
	uint8_t total;			/*数据总包数据*/
	vehicle_adas_data_t data[VEH_ADAS_INFOR_NUM];	/*数据包内容*/
}vehicle_adas_infor_t;
#pragma pack()

typedef struct 
{
	uint32_t lat;			/*以度为单位的纬度值乘以10的6次方，精确到百万分之一度*/
	uint32_t lon;			/*以度为单位的经度值乘以10的6次方，精确到百万分之一度*/
}vehicle_adas_position_t;

/** ****************************************************************************
* @remarks       void vehicle_create_task( unsigned portBASE_TYPE uxPriority )
* @brief         创建车机数据处理任务
* @param[in]     uxPriority 优先级
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
extern void vehicle_create_task( unsigned portBASE_TYPE uxPriority );

/** ****************************************************************************
* @remarks       void vehicle_data_now_get( n808_vehicle_data_t *cardata )
* @brief         获取車輛数据信息
* @param[in]     无
* @param[out]    
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_data_now_get( n808_vehicle_data_t *cardata );
/** ****************************************************************************
* @remarks       can_work_state_e can_work_st_get( void )
* @brief         获取ACC工作状态
* @param[in]     无
* @param[out]    无
* @return        
* @attention     无
*******************************************************************************/
extern can_work_state_e can_work_st_get( void );
/** ****************************************************************************
* @remarks       vehicle_ctrl_run_state_e vehiclect_runing_state_get( void )
* @brief         
* @param[in]     无
* @param[out]    无
* @return        运行状态
* @attention     
*******************************************************************************/
extern vehicle_ctrl_run_state_e vehiclect_runing_state_get( void );
/** ****************************************************************************
* @remarks       void vehiclect_runing_state_set( vehicle_ctrl_run_state_e  state )
* @brief         
* @param[in]     state 运行状态
* @param[out]    无
* @return        无
* @attention     
*******************************************************************************/
extern void vehiclect_runing_state_set( vehicle_ctrl_run_state_e  state );
/** ****************************************************************************
* @remarks       static uint8_t vehicle_ota_sem_set(void)
* @brief         发送信号量
* @param[in]     无
* @param[out]    无
* @return       无
* @attention     无
*******************************************************************************/
extern void vehicle_ota_sem_set(void);
/** ****************************************************************************
* @remarks       void mcu_ota_cle_overnum(void)
* @brief         清楚升级标记
* @param[in]     无
* @param[out]    无
* @return        
* @attention     
*******************************************************************************/
extern void mcu_ota_cle_overnum(void);
/** ****************************************************************************
* @remarks       void mcu_ota_set_status(void)
* @brief         设置升级标记
* @param[in]     无
* @param[out]    无
* @return        
* @attention     
*******************************************************************************/
extern void mcu_ota_set_status(void);
/** ****************************************************************************
* @remarks       uint32_t n808_cle_save_data(void)
* @brief         
* @param[in]     无
* @param[out]    无
* @return        pdPASS 成功 ，pdFAIL 失败
* @attention     
*******************************************************************************/
extern uint32_t n808_cle_save_data(void);
/** ****************************************************************************
* @remarks      uint8_t *get_mcuversion(void)
* @brief         
* @param[in]     无
* @param[out]    无
* @return    		mcu version    
* @attention     
*******************************************************************************/
extern uint8_t *get_mcuversion(void);
/** ****************************************************************************
* @remarks      uint8_t get_vehicleAcc_st(void)
* @brief         
* @param[in]     无
* @param[out]    无
* @return    	 08 00
* @attention     
*******************************************************************************/
extern uint8_t get_vehicleAcc_st(void);
/** ****************************************************************************
* @remarks      uint8_t get_vehicleLock_st(void)
* @brief         
* @param[in]     无
* @param[out]    无
* @return    	01 00 
* @attention     
*******************************************************************************/
extern uint8_t get_vehicleLock_st(void);
/** ****************************************************************************
* @remarks       uint32_t gzlable_operateid(uint8_t cmd)
* @brief         
* @param[in]     无
* @param[out]    无
* @return        pdPASS 成功 ，pdFAIL 失败
* @attention     
*******************************************************************************/
extern uint32_t gzlable_operateid(uint8_t cmd,uint8_t *data,uint16_t len);
/** ****************************************************************************
* @remarks       uint8_t n808_gsen_sensor_state_get( void )
* @brief         获取gsen状态
* @param[in]     无
* @param[out]    
* @return        无
* @attention     无
*******************************************************************************/
extern uint8_t n808_gsen_sensor_state_get( void );

/** ****************************************************************************
* @remarks       uint8_t warmcarbms_msg_read( uint8_t *pa,uint16_t len )
* @brief         WARMCAR BMS车辆信息读取
* @param[in]     *pa 目标地址
* @param[out]    无
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint8_t warmcarbms_msg_read( uint8_t *pa );

/** ****************************************************************************
* @remarks       uint8_t warmcarled_data_read( uint8_t *pa )
* @brief         WARMCAR LED屏幕返回数据读取 
* @param[in]     无
* @param[out]    *pa 目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint8_t warmcarled_data_read( uint8_t *pa );

/** ****************************************************************************
* @remarks       uint8_t warmcarled_heart_state_get( void )
* @brief         WARMCAR LED 心跳状态 获取
* @param[in]     无
* @param[out]    无
* @return        心跳 状态
* @attention     无
*******************************************************************************/
extern uint8_t warmcarled_heart_state_get( void );

/** ****************************************************************************
* @remarks       uint8_t warmcarled_net_data_write( uint8_t *pa, uint32_t len )
* @brief         WARMCAR LED 网络数据 设置
* @param[in]     *pa 数据源地址，len 数据包长度
* @param[out]    *pa 目标地址
* @return        pdFAIL - 失败，pdPASS - 成功
* @attention     无
*******************************************************************************/
extern uint8_t warmcarled_net_data_write( uint8_t *pa, uint16_t len );

/** ****************************************************************************
* @remarks       vehicle_authentication_type_e vehicle_authentication_st_get( void )
* @brief         获取车辆鉴权状态
* @param[in]     无
* @param[out]    无
* @return        鉴权状态
* @attention     无
*******************************************************************************/
extern vehicle_authentication_type_e vehicle_authentication_st_get( void );

/** ****************************************************************************
* @remarks       void vehicle_authentication_st_set( vehicle_authentication_type_e type )
* @brief         设置车辆鉴权状态
* @param[in]     车辆鉴权的状态
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_authentication_st_set( vehicle_authentication_type_e type );

/** ****************************************************************************
* @remarks       vehicle_authentication_type_e vehicle_authentication_mangatio_st_get( void )
* @brief         获取车辆鉴权状态
* @param[in]     无
* @param[out]    无
* @return        鉴权状态
* @attention     无
*******************************************************************************/
extern vehicle_authentication_type_e vehicle_authentication_mangatio_st_get( void );

/** ****************************************************************************
* @remarks       void vehicle_authentication_mangatio_st_set( vehicle_authentication_type_e type )
* @brief         设置车辆鉴权状态
* @param[in]     车辆鉴权的状态
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_authentication_mangatio_st_set( vehicle_authentication_type_e type );

/** ****************************************************************************
* @remarks       uint32_t vehicle_engine_start_st_set( uint16_t sn, uint16_t id, uint8_t st )
* @brief         设置车辆一键启动控制状态
* @param[in]     sn 流水号，id ID，st 控制状态
* @param[out]    无
* @return        pdPASS 成功，pdFAIL 失败
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_engine_start_st_set( uint16_t sn, uint16_t id, uint8_t st );

/** ****************************************************************************
* @remarks       uint32_t vehicle_engine_start_st_get( uint8_t *infor )
* @brief         获取车辆一键启动控制数据
* @param[in]     *infor 获取信息目标地址
* @param[out]    无
* @return        返回数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_engine_start_st_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       void vehicle_engine_start_st_clean( void )
* @brief         清除车辆一键启动控制数据
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_engine_start_st_clean( void );

/** ****************************************************************************
* @remarks       uint32_t vehicle_engine_start_result_set( uint8_t *infor )
* @brief         设置车辆一键启动控制应答数据
* @param[in]     *infor 设置信息源地址
* @param[out]    无
* @return        pdPASS 成功，pdFAIL 失败
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_engine_start_result_set( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_engine_start_result_get( uint8_t *infor )
* @brief         获取车辆一键启动应答数据
* @param[in]     无
* @param[out]    *infor 获取信息目标地址
* @return        返回数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_engine_start_result_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_fault_code_infor_set( uint8_t type, uint8_t model )
* @brief         查询车辆故障码信息
* @param[in]     type 故障码表类型，model 车辆类型，size 数据长度，*infor 数据源地址 
* @param[out]    无
* @return        pdPASS 成功，pdFAIL 失败
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_fault_code_infor_set( uint8_t type, uint8_t model ,uint16_t size, uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_fault_code_infor_get( uint8_t *infor )
* @brief         获取车辆故障码信息
* @param[in]     无
* @param[out]    *infor 故障信息目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_fault_code_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_tire_pressure_data_get( void )
* @brief         获取车辆车胎压力
* @param[in]     无
* @param[out]    *infor 数据目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_tire_pressure_data_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint8_t vehicle_type_data_get( void )
* @brief         获取车辆类型数据
* @param[in]     无
* @param[out]    无
* @return        车辆类型 0-电车 1-油车
* @attention     无
*******************************************************************************/
extern uint8_t vehicle_type_data_get( void );

/** ****************************************************************************
* @remarks       uint8_t vehicle_type_sensor_get( void )
* @brief         获取氧气传感器状态
* @param[in]     无
* @param[out]    无
* @return        车辆类型 0-正常 1-报警
* @attention     神州项目中使用
*******************************************************************************/
extern uint8_t vehicle_type_sensor_get( void );

/** ****************************************************************************
* @remarks       uint32_t vehicle_maintenance_infor_set( uint8_t *infor, uint32 size )
* @brief         设置车辆保养数据
* @param[in]     无
* @param[out]    无
* @return        pdPASS - 成功，pdFAIL - 失败
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_maintenance_infor_set( uint8_t *infor, uint32 size );

/** ****************************************************************************
* @remarks       uint32_t vehicle_maintenance_infor_set( uint8_t *infor )
* @brief         获取车辆保养数据
* @param[in]     无
* @param[out]    *infor 数据源目标地址
* @return        获取得数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_maintenance_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_maintenance_cfg_set( uint8_t *cfg, uint32 len )
* @brief         车辆保养信息设置
* @param[in]     无
* @param[out]    *infor 数据源目标地址
* @return        获取得数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_maintenance_cfg_set( uint8_t *cfg, uint32 len );

/** ****************************************************************************
* @remarks       uint32_t vehicle_maintenance_cfg_set( uint8_t *cfg, uint32 len )
* @brief         车辆保养信息设置
* @param[in]     无
* @param[out]    *infor 数据源目标地址
* @return        获取得数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_maintenance_cfg_get( uint8_t *cfg );

/** ****************************************************************************
* @remarks       void vehicle_maintenance_cfg_state_clean( void )
* @brief         车辆保养状态信息清除
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_maintenance_cfg_state_clean( void );

/** ****************************************************************************
* @remarks       uint32_t vehicle_bms_infor_set( uint8_t *infor, uint32 len )
* @brief         车辆BMS数据设置
* @param[in]     *infor 数据源地址，len 数据长度
* @param[out]    无
* @return        pdPASS - 成功，pdFAIL - 失败
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_bms_infor_set( uint8_t *infor, uint32 len );

/** ****************************************************************************
* @remarks       uint32_t vehicle_bms_infor_get( uint8_t *infor )
* @brief         获取车辆BMS数据
* @param[in]     无
* @param[out]    *infor 数据目标地址
* @return        数据包长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_bms_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_seed_infor_set( uint8_t *infor )
* @brief         设置SEED数据
* @param[in]     *infor 数据源地址
* @param[out]    无
* @return        pdFAIL-失败，pdPASS-成功
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_seed_infor_set( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_seed_infor_get( uint8_t *infor )
* @brief         获取SEED数据
* @param[in]     无
* @param[out]    *infor 数据目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_seed_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_key_infor_set( uint8_t *infor )
* @brief         设置KEY数据
* @param[in]     *infor 数据源地址
* @param[out]    无
* @return        pdFAIL-失败，pdPASS-成功
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_key_infor_set( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_key_infor_get( uint8_t *infor )
* @brief         获取KEY数据
* @param[in]     无
* @param[out]    *infor 目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_key_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_adas_infor_set( uint8_t *infor )
* @brief         设置车辆ADAS实时数据包
* @param[in]     *infor 数据源地址
* @param[out]    无
* @return        pdFAIL - 失败，pdPASS - 成功。
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_adas_infor_set( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint32_t vehicle_adas_infor_get( uint8_t *infor )
* @brief         获取车辆ADAS实时数据包
* @param[in]     无
* @param[out]    *infor 目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_adas_infor_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       void vehicle_rv_power_control_set( uint8_t control )
* @brief         控制房车电源
* @param[in]     control 控制01-启动，02-熄火
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void vehicle_rv_power_control_set( uint8_t control );

/** ****************************************************************************
* @remarks       static uint8_t sz_ext_status_get(uint8_t *da)
* @brief         神州扩展状态获取
* @param[in]     *da 获取状态的存储地址
* @param[out]    
* @return        获取状态的字节长度
* @attention     无
*******************************************************************************/
uint8_t sz_ext_status_get(uint8_t *da);
 
/** ****************************************************************************
* @remarks       static uint8_t sz_ext_status_parse(uint8_t *da)
* @brief         神州扩展状态解析
* @param[in]     *da mcu传回的信息
* @param[out]    
* @return        0成功 
* @attention     无
*******************************************************************************/
static uint8_t sz_ext_status_parse(uint8_t *da);

/** ****************************************************************************
* @remarks       uint32 vehicle_set_vin(uint8_t *newvin)
* @brief         设置新的VIN
* @param[in]     新设置的VIN
* @param[out]    无
* @return        pdFAIL失败 pdPASS成功
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_set_vin(uint8_t *newvin);


/******************************************************************************
* @remarks       uint8_t vehicle_vin_get(uint8_t *da)
* @brief         获取车辆VIN 
* @param[in]     获取VIN的存储地址
* @param[out]    
* @return        获取的有效字节长度
* @attention     无
*******************************************************************************/
extern uint8_t vehicle_vin_get(uint8_t *da);

/** ****************************************************************************
* @remarks       uint32_t vehicle_dtc_code_get(uint8_t *infor)
* @brief         获取全车故障码的数据，格式由MCU定义
* @param[in]     infor:存储故障码的位置
* @param[out]    获取故障码信息的长度
* @return        0成功 
* @attention     无
*******************************************************************************/
extern uint32_t vehicle_dtc_code_get( uint8_t *infor );

/** ****************************************************************************
* @remarks       uint8_t vehicle_new_info_0504_25_info_get(uint8_t *da)
* @brief         车辆新状态0504附加包25信息获取
* @param[in]     *da 获取状态的存储地址
* @param[out]    
* @return        获取状态的字节长度
* @attention     无
*******************************************************************************/
extern uint8_t vehicle_new_info_0504_25_info_get(uint8_t *da);

#endif

